home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok82.lha / Printf1.4 / Printf.mod < prev    next >
Text File  |  1993-08-15  |  3KB  |  94 lines

  1. (*
  2. :Program.    Printf
  3. :Author.     Volker Rudolph, hartmut Goebel [hG]
  4. :Address.    Lettow-Vorbeck-Str. 11 / 6750 Kaiserslautern
  5. :Phone.      06301/8566
  6. :Date.       22 Aug 1992 21:04:06
  7. :Copyright.  PD
  8. :Language.   Assembler / Oberon
  9. :Translator. A68k / Amiga-Oberon V2.45
  10. :History.    V1.3 14 Nov 1991 [hG] LONGINT -> s.ADDRESS
  11. :History.    V1.4 27 Aug 1992 [hG] angepasst an AO 3.0
  12. :Contents.   Allzweck-Textausgabe in Form der C-Funktion Printf
  13. :Usage.      Aufruf und Parameter wie in C
  14. *)
  15.  
  16. MODULE Printf;
  17.  
  18. IMPORT d:Dos, s: SYSTEM;
  19.  
  20. (* $JOIN obj/printf.o $JOIN obj/sprintf.o *)
  21.  
  22. CONST
  23.   (* Größe des Ausgabepuffers *)
  24.   (* Der Ausgabestring darf nicht länger sein *)
  25.   bufSize * = 120;
  26.  
  27. TYPE
  28.   (* Man kann jede Funktion dieses Typs als Ausgabeprozedur angeben *)
  29.   WriteProcType * = PROCEDURE(str:ARRAY OF CHAR);
  30.  
  31. VAR
  32.   (* Ausgabeprozedur *)
  33.   writeProc * :WriteProcType;
  34.  
  35. (* --------------------------------------------------------------- *)
  36.  
  37. PROCEDURE Printf0*{"Printf.Printf0"}(str:ARRAY OF CHAR);
  38. PROCEDURE Printf1*{"Printf.Printf1"}(str:ARRAY OF CHAR;val1:s.ADDRESS);
  39. PROCEDURE Printf2*{"Printf.Printf2"}(str:ARRAY OF CHAR;val1,val2:s.ADDRESS);
  40. PROCEDURE Printf3*{"Printf.Printf3"}(str:ARRAY OF CHAR;val1,val2,val3:s.ADDRESS);
  41. PROCEDURE Printf4*{"Printf.Printf4"}(str:ARRAY OF CHAR;val1,val2,val3,val4:s.ADDRESS);
  42. PROCEDURE Printf5*{"Printf.Printf5"}(str:ARRAY OF CHAR;val1,val2,val3,val4,val5:s.ADDRESS);
  43. PROCEDURE Printf6*{"Printf.Printf6"}(str:ARRAY OF CHAR;val1,val2,val3,val4,val5,val6:s.ADDRESS);
  44.  
  45. PROCEDURE SPrintf0 * {"Printf.SPrintf0"}
  46.   (VAR buf:ARRAY OF CHAR;str:ARRAY OF CHAR);
  47. PROCEDURE SPrintf1 * {"Printf.SPrintf1"}
  48.   (VAR buf:ARRAY OF CHAR;str:ARRAY OF CHAR;val1:s.ADDRESS);
  49. PROCEDURE SPrintf2 * {"Printf.SPrintf2"}
  50.   (VAR buf:ARRAY OF CHAR;str:ARRAY OF CHAR;val1,val2:s.ADDRESS);
  51. PROCEDURE SPrintf3 * {"Printf.SPrintf3"}
  52.   (VAR buf:ARRAY OF CHAR;str:ARRAY OF CHAR;val1,val2,val3:s.ADDRESS);
  53. PROCEDURE SPrintf4 * {"Printf.SPrintf4"}
  54.   (VAR buf:ARRAY OF CHAR;str:ARRAY OF CHAR;val1,val2,val3,val4:s.ADDRESS);
  55. PROCEDURE SPrintf5 * {"Printf.SPrintf5"}
  56.   (VAR buf:ARRAY OF CHAR;str:ARRAY OF CHAR;val1,val2,val3,val4,val5:s.ADDRESS);
  57. PROCEDURE SPrintf6 * {"Printf.SPrintf6"}
  58.   (VAR buf:ARRAY OF CHAR;str:ARRAY OF CHAR;val1,val2,val3,val4,val5,val6:s.ADDRESS);
  59.  
  60. (* ---------------------------------------------------------------- *)
  61.  
  62. (* $RangeChk- $OvflChk- $NilChk- $CopyArrays- *)
  63. PROCEDURE WriteString*(str:ARRAY OF CHAR);
  64. VAR
  65.   i:LONGINT;
  66.   out:d.FileHandlePtr;
  67. BEGIN
  68.   i := 0;
  69.   WHILE (i < LEN(str)) AND (str[i] # 0X) DO INC(i) END;
  70.   out := d.Output();
  71.   IF (out = NIL) OR
  72.      (d.Write(out,str,i) # i) THEN
  73.     HALT(20)
  74.   END; (* END *)
  75. END WriteString;
  76.  
  77. PROCEDURE WriteLn*;
  78. BEGIN
  79.   writeProc("\n");
  80. END WriteLn;
  81.  
  82. (* Hilfs-Prozedur, die von den Assembler-Routinen aufgerufen wird *)
  83. (* $CopyArrays- *)
  84. PROCEDURE WriteProc*(str:ARRAY OF CHAR);
  85. BEGIN
  86.   writeProc(str);
  87. END WriteProc;
  88.  
  89. (* ---------------------------------------------------------------- *)
  90.  
  91. BEGIN
  92.   writeProc := WriteString;
  93. END Printf.
  94.